import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as cors from 'cors';
import { VersioningType, ValidationPipe } from '@nestjs/common';
import * as session from 'express-session';
import { NestExpressApplication } from '@nestjs/platform-express';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { RoleGuard } from './guard/role/role.guard';
// 响应结果封装类
import { Response } from './common/response';

// 全局异常过滤器
import { HttpFilter } from './common/filter';

// session
import { join } from 'path';

//中间件
const middlewareAll = (req, res, next) => {
  console.log('中间件执行了');
  next();
};

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  // 跨域中间件
  app.use(cors());
  // 注册中间件
  app.use(middlewareAll);

  app.enableVersioning(
    // 开启版本控制
    {
      type: VersioningType.URI, // 版本控制类型
      // defaultVersion: '1', // 默认版本
    },
  );

  // 开启session
  app.use(
    session({
      secret: 'XiaoMan',
      name: 'xm.session',
      rolling: true,
      cookie: { maxAge: null },
    }),
  );

  // 静态资源访问路径配置
  app.useStaticAssets(join(__dirname, 'images'), {
    prefix: '/prefix', // 访问路径前缀
  });

  // 创建swagger文档配置信息
  const config = new DocumentBuilder()
    .setTitle('接口文档')
    .setDescription('Hello-nest 接口文档')
    .setVersion('1.0')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('swagger', app, document);

  // 全局异常过滤器
  app.useGlobalFilters(new HttpFilter());
  // 全局响应拦截器
  app.useGlobalInterceptors(new Response());
  // 全局验证管道
  app.useGlobalPipes(new ValidationPipe());
  // 全局守卫
  // app.useGlobalGuards(new RoleGuard());
  await app.listen(process.env.PORT ?? 8080);
}
bootstrap();
